package com.examples.service;

import com.examples.model.NewInstanceInfo;
import com.examples.model.NewInstanceReq;
import com.examples.model.QueryInstanceReq;
import com.examples.model.RefreshInstanceReq;
import com.examples.model.ReleaseInstanceReq;
import com.examples.model.UpdateInstanceStatusReq;
import com.examples.model.UpgradeInstanceReq;

import java.util.List;

public interface IsvProduceService {
    /**
     * 新购场景服务商需要实现的业务逻辑，包含下面步骤：
     * 1；基于newInstanceReq请求参数对象做业务校验
     * 2：处理具体业务逻辑，生成资源
     *
     * @param newInstanceReq 云市场请求的数据对象
     * @return 实例id
     */
    String newInstance(NewInstanceReq newInstanceReq);

    /**
     * 新购异步处理场景服务商需要实现的业务逻辑，包含下面步骤：
     * 1；基于newInstanceReq请求参数对象做业务校验
     * 2：直接返回实例id,异步处理具体业务逻辑，生成资源
     *
     * @param newInstanceReq 云市场请求的数据对象
     * @return 实例id
     */
    String newInstance4Async(NewInstanceReq newInstanceReq);

    /**
     * 查询场景服务商需要实现的业务逻辑，包含下面步骤：
     * 1；基于QueryInstanceReq请求参数对象做业务校验
     * 2：处理具体业务逻辑，返回资源
     *
     * @param queryInstanceReq 云市场请求的数据对象
     * @return 响应
     */
    List<NewInstanceInfo> queryInstance(QueryInstanceReq queryInstanceReq);

    /**
     * 续费场景服务商需要实现的业务逻辑，包含下面步骤：
     * 基于refreshInstanceReq请求参数做业务校验
     * 处理过期具体业务逻辑
     *
     * @param refreshInstanceReq 云市场请求的数据对象
     */
    void refreshInstance(RefreshInstanceReq refreshInstanceReq);

    /**
     * 商品冻结和解冻场景服务商需要实现的业务逻辑，包含下面步骤：
     * 基于updateInstanceStatus请求参数做业务校验
     * 处理冻结和解冻具体业务逻辑
     *
     * @param updateInstanceStatusReq 云市场请求的数据对象
     */
    void updateInstanceStatus(UpdateInstanceStatusReq updateInstanceStatusReq);

    /**
     * 资源释放场景服务商需要实现的业务逻辑，包含下面步骤：
     * 基于releaseInstanceReq请求参数做业务校验
     * 处理过期具体业务逻辑
     *
     * @param releaseInstanceReq 云市场请求的数据对象
     */
    void releaseInstance(ReleaseInstanceReq releaseInstanceReq);

    /**
     * 升级场景服务商需要实现的业务逻辑，包含下面步骤：
     * 基于upgradeReq请求参数做业务校验
     * 处理具体资源释放业务逻辑
     *
     * @param upgradeInstanceReq 云市场请求的数据对象
     */
    void upgradeInstance(UpgradeInstanceReq upgradeInstanceReq);
}
